import os
import flask_bootstrap
import sys

# 获取flask_bootstrap的模板目录路径
flask_bootstrap_template_path = os.path.join(os.path.dirname(flask_bootstrap.__file__), 'templates')

a = Analysis(
    ['manage.py'],
    pathex=[],
    binaries=[],
    datas=[
        (flask_bootstrap_template_path, 'flask_bootstrap/templates'),
        # 将配置文件复制到dist目录下
        ('./app/config.py', './'),
        ('./app/config_default.py', './'),
        ('./app/log.py', './')
    ],
    hiddenimports=[
        # 添加可能需要的隐藏导入
        'flask_script.commands',
        'flask_script._compat',
        'app.compat'
    ],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=['config', 'config_default', 'log'],  # 排除这些模块，不打包到可执行文件中
    noarchive=False,
    optimize=0,
)
pyz = PYZ(a.pure)

# 对于Linux版本，不需要Splash屏幕和Windows特有的设置

# 使用自定义变量名，避免与Python内置函数exec冲突
executable = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.datas,
    [],
    name='write_books',  # Linux下的可执行文件名，不需要.exe后缀
    debug=False,
    bootloader_ignore_signals=False,
    strip=True,  # 在Linux上启用strip以减小文件大小
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=True,  # 在Linux上保持控制台输出
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,  # 自动检测架构
    codesign_identity=None,  # Linux下不需要
    entitlements_file=None,  # Linux下不需要
    # Linux下不设置Windows图标
)

# 创建Linux下的目录结构
binaries_collector = COLLECT(
    executable,
    a.binaries,
    a.zipfiles,
    a.datas,
    strip=False,  # 在COLLECT时不重复strip
    upx=True,
    upx_exclude=[],
    name='write_books_linux',
)

# 以下说明很重要：
# 1. 这个spec文件必须在Linux环境中运行才能生成Linux二进制文件
# 2. 在Windows环境中运行pyinstaller默认会生成.exe文件，这是平台限制
# 3. 要生成真正的Linux二进制文件，需要在Linux系统上执行：pyinstaller write_books_linux.spec
# 4. 生成的文件将位于dist/write_books_linux目录下，其中write_books是无后缀的Linux可执行文件